package main

// UnderlyingType 底层类型
type UnderlyingType struct{}

// UnderlyingTypeHello 底层类型的方法
func (u *UnderlyingType) UnderlyingTypeHello() {
	println("underlying type hello")
}

// NewDefinitionType 通过TypeDefinition,定义一个新类型
// NewDefinitionType本质上是一个新类型,它的底层类型是UnderlyingType
// NewDefinitionType和UnderlyingType是本质相同的(Identical),它们可以通过显式的类型转换来互相赋值
// Type Definition主要的使用场景:使用某个第三方SDK,想要扩展其功能,但是无法修改源码,此时可以基于SDK中的底层类型自定义新类型
type NewDefinitionType UnderlyingType

// NewDefinitionTypeHello 新类型的方法
func (n *NewDefinitionType) NewDefinitionTypeHello() {
	println("new definition type hello")
}

// M 通过类型字面值来定义新类型,可以简化操作
type M map[string]int
